// packageA/pages/questionTotal/questionTotal.js
import { useGetQuestion } from '../../../utils/useGetQuestion';
import { getUserGrade } from '../../../utils/userInfo';
Page({

  /**
   * 页面的初始数据
   */
  data: {
    resArr: Array, // 获取到的错题列表
    getDataType: 'all', // 获取数据的方式
    skipNum: 0, // 从第几个数据开始获取
    currentPage: 0, // 当前是第几页
    limitNum: 5, // 要获取几条数据
    isShowOnReachTips: false, // 上拉加载的提示，是否显示
    isMoreDataTips: false, // 是否以及获取了所有的数据了
    startOnReachBottom: false, // 目前是否时上拉操作
    empty: false, // 显示空页面
    gradeDesc: Object, // 根据年级信息，进行分类查询
    option1: [
      { text: '暂未选择', value: 'null' },
      { text: '小学', value: '小学' },
      { text: '初中', value: '初中' },
      { text: '高中', value: '高中' },
      { text: '大学', value: '大学' },
      { text: '其他', value: '其他' },
    ],
    option2: [
      { text: '暂未选择', value: 'null' },
    ],
    option3: [
      { text: '排序方式', value: 'a' },
      { text: '难易度升序', value: 'b' },
      { text: '难易度降序', value: 'c' },
      { text: '掌握度升序', value: 'd' },
      { text: '掌握度降序', value: 'e' },
      { text: '创建时间升序', value: 'f' },
      { text: '创建时间降序', value: 'g' },
      { text: '最近修改', value: 'h' },
    ],
    value1: 'null',
    value2: 'null',
    value3: 'a',
  },

  // 选择学位
  onChange1(e) {
    const that = this;
    const { grade } = getUserGrade();
    // 从grade中，找到包含的年级，然后渲染option2
    let newOption2 = [{ text: '暂未选择', value: 'null' }];
    grade.forEach(item => {
      if (item.text === e.detail) {
        item.children.forEach(item2 => {
          newOption2.push({ text: item2.text, value: item2.text });
        });
      };
    });
    that.setData({
      option2: [...newOption2],
      value1: e.detail,
      value2: newOption2[0].value,
    })
  },

  // 选择年级
  onChange2(e) {
    const that = this;
    const { value1 } = that.data;
    console.log(value1, e.detail);
    const nowGradeDesc = {
      desc1: value1,
      desc2: e.detail,
    }
    that.setData({
      gradeDesc: { ...nowGradeDesc },
      getDataType: 'grade',
      skipNum: 0, // 重置
      currentPage: 0, // 重置
      limitNum: 5, // 重置
      resArr: [],
    }, () => {
      const { skipNum, limitNum } = that.data;
      that.getData(skipNum, limitNum);
    })
  },

  // 更换排序方式
  onChange3(e) {
    const sortType = e.detail;
    switch (sortType) {
      // 难易度升序
      case 'b':
        this.sortRiseArr('difficultyRate');
        break;
      // 难易度降序
      case 'c':
        this.sortDescArr('difficultyRate');
        break;
      // 掌握程度升序
      case 'd':
        this.sortRiseArr('graspRate');
        break;
      // 掌握程度降序
      case 'e':
        this.sortDescArr('graspRate');
        break;
      // 创建时间升序
      case 'f':
        this.sortRiseArr('creatDate');
        break;
      // 创建时间降序
      case 'g':
        this.sortDescArr('creatDate');
        break;
      // 最近修改
      case 'h':
        this.sortRiseArr('changeTime');
        break;
    }

  },

  // 当前列表升序
  sortRiseArr: function (sortTypeEn) {
    wx.showLoading({
      title: '排序中...'
    })
    const that = this;
    const { resArr } = that.data;
    resArr.sort((a, b) => {
      return a[sortTypeEn] - b[sortTypeEn];
    })
    that.setData({
      resArr,
    }, () => {
      wx.hideLoading();
    })
  },

  // 当前列表降序
  sortDescArr: function (sortTypeEn) {
    wx.showLoading({
      title: '排序中...'
    })
    const that = this;
    const { resArr } = that.data;
    resArr.sort((a, b) => {
      return b[sortTypeEn] - a[sortTypeEn];
    })
    that.setData({
      resArr,
    }, () => {
      wx.hideLoading();
    })
  },

  showModal(e) {
    this.setData({
      modalName: e.currentTarget.dataset.target
    })
  },
  hideModal(e) {
    this.setData({
      modalName: null
    })
  },
  menuBorder: function (e) {
    this.setData({
      menuBorder: e.detail.value
    });
  },
  menuArrow: function (e) {
    this.setData({
      menuArrow: e.detail.value
    });
  },
  menuCard: function (e) {
    this.setData({
      menuCard: e.detail.value
    });
  },

  onChangeRate() {
    wx.showToast({
      title: '在这里修改无效，请前往错题的详情页',
      icon: 'none',
    })
  },

  /* 
     * 根据 skipNum、limitNum 获取数据
     */
  getData: async function (skipNum, limitNum) {
    const that = this;
    // const { className, gradeDesc } = that.data.options;
    // 当前是否进行了上拉加载更多的操作
    const { getDataType, startOnReachBottom, resArr, currentPage, gradeDesc } = that.data;
    if (startOnReachBottom) {
      skipNum = currentPage * limitNum; // 重新获取数据的位置
      const newResArr = await useGetQuestion({ skipNum, limitNum, gradeDesc }, getDataType);
      // 判断这一次加载出来的数据，满不满足11条，不满足的话，说明以及没有更多了
      that.setData({
        resArr: [...resArr, ...newResArr],
        currentPage: currentPage + 1,
      });
      if (newResArr.length < 5) {
        that.setData({
          isShowOnReachTips: false,
          isMoreDataTips: true,
        })
      }
    } else {
      // 初始获取错题列表
      wx.showLoading({
        title: '数据获取中...'
      })
      if (currentPage === 0) {
        const newResArr = await useGetQuestion({ skipNum, limitNum, gradeDesc }, getDataType);
        // 获取到值，停止加载
        wx.hideLoading();
        that.setData({
          resArr: [...newResArr],
          currentPage: currentPage + 1,
          value3: 'a',
        }, () => {
          if (newResArr.length === 0) {
            // 说明页面是空的，没有数据
            that.setData({
              empty: true,
            })
          } else {
            // 有重新设置，防止上一次选择的影响
            that.setData({
              empty: false,
            })
          }
        });
      }
    };

    // 如果获取到的条数，不超过5条，上拉加载的提示不能显示出来
    if (resArr.length <= 5) {
      that.setData({
        isShowOnReachTips: false,
      })
    };

    console.log(that.data.resArr);
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    // 第一次获取的数据
    const { skipNum, limitNum } = this.data;
    this.getData(skipNum, limitNum);
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    const that = this;
    // 下拉时，重新获取全部数据 all
    that.setData({
      getDataType: 'all',
      resArr: [],
      skipNum: 0, // 重置
      currentPage: 0, // 重置
      limitNum: 5, // 重置
      option2: [
        { text: '暂未选择', value: 'null' },
      ],
      value1: 'null',
      value2: 'null',
      value3: 'a',
    }, () => {
      const { skipNum, limitNum } = that.data;
      that.getData(skipNum, limitNum);
      setTimeout(() => {
        wx.stopPullDownRefresh();
        wx.showToast({
          title: '刷新成功',
        })
      }, 1000)
    })
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    const that = this;
    that.setData({
      isShowOnReachTips: true,
      startOnReachBottom: true,
      isMoreDataTips: false,
    }, () => {
      // 第一次获取的数据
      const { skipNum, limitNum } = that.data;
      that.getData(skipNum, limitNum);
    })
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})